import { CJDBUtil } from '../db/CJDBUtil'
import "reflect-metadata";
import { AnnotationEnum } from '../annotation/AnnotationEnum';
import { Id } from '../annotation/Id';
import { OperatorType } from '../db/OperatorType';
import { Condition } from '../db/Condition';

const TAG = "CJBaseModel"

export class CJBaseModel {
  id: number;

  // static tableName: string
  // static objects = {
  //   get: () => {
  //     console.log(TAG, JSON.stringify(CJBaseModel.prototype))
  //     console.log(TAG,)
  //   },
  //   all: () => {
  //
  //   },
  //   filter: () => {
  //
  //   },
  //   delete: () => {
  //
  //   }
  // }

  delete(): Promise<number> {
    if (!this.id) {
      throw new Error('id can not exist！');
    }
    return CJDBUtil.delete(this.constructor, [
      new Condition('id', OperatorType.EQUAL_TO, this.id)
    ])
  }

  save(): Promise<number> {
    if (!this.id) {
      return CJDBUtil.save(this)
    } else {
      return this.update()
    }
  }

  update(): Promise<number> {
    if (!this.id) {
      throw new Error('id can not exist！');
    }
    let values = {
      ...this
    }
    delete values.id
    return CJDBUtil.update(this.constructor, values, [
      new Condition('id', OperatorType.EQUAL_TO, this.id)
    ])
  }
}